home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 7 / DOS203A.dsk / DOWNLOAD.S < prev    next >
Text File  |  2012-02-16  |  9KB  |  306 lines

  1. */       SEP 13/86
  2. *****************************
  3. *                           *
  4. *     DOWNLOAD ROUTINE      *
  5. * WRITTEN BY R. GLENN JONES *
  6. *         FOR THE           *
  7. *  DOT MATRIX FONT EDITOR   *
  8. *                           *
  9. *     BIG MAC ASSEMBLER     *
  10. *                           *
  11. * ROUTINE IS INVOKED BY :   *
  12. *                           *
  13. *  CALL DW                  *
  14. *                           *
  15. *  WHERE DW = 2048  ($800)  *
  16. *                           *
  17. *                           *
  18. *****************************
  19. *
  20. *****************************
  21. *                           *
  22. *     ZERO PAGE EQUATES     *
  23. *                           *
  24. *****************************
  25. *
  26. ESC       = 27
  27. COPY      = 42
  28. DOWNCHAR  = 42
  29. CHR0      = 48
  30. CHR1      = 49
  31. *
  32. *****************************
  33. *                           *
  34. *     ZERO PAGE EQUATES     *
  35. *                           *
  36. *****************************
  37. *
  38. FPTR      EQU $4         ; POINTER TO FILE
  39. BYTPTR    EQU $10        ; POINTER TO CHARACTER BYTES
  40. CH        EQU $24        ; CURSOR HORIZONTAL
  41. CV        EQU $25        ; CURSOR VERTICAL
  42. *
  43. *****************************
  44. *                           *
  45. *    EXTERNAL REFERENCES    *
  46. *                           *
  47. *****************************
  48. *
  49. LEN       EQU $07FE
  50. GETADDR   EQU $412A      ; CALCULATE ADDRESS OF CHAR DATA USING INDX
  51. INDX      EQU $41E4
  52. LOADADDR  EQU $AA72      ; ADDRESS OF LAST BLOAD
  53. KYB       EQU $C000      ; KEYBOARD
  54. KYBSTROB  EQU $C010      ; KEYBOARD STROBE
  55. STROUT    EQU $DB3A      ; PRINT STRING AT (A) LOW (Y) HIGH
  56. VTAB      EQU $FC22      ; SET VTAB TO CV
  57. HOME      EQU $FC58      ; CLEAR TEXT SCREEN
  58. *
  59. *****************************
  60. *                           *
  61. *          MACRO            *
  62. *                           *
  63. *****************************
  64. *
  65. CHROUT    MAC
  66. STILHERE  LDX $C1C1
  67.           CPX #128
  68.           BCS STILHERE
  69. CHRGONE   STA $C090
  70.           EOM
  71. * TEST TO SEE IF LAST CHARACTER HAS LEFT
  72. * IF $C1C1 IS GREATER THAN 128
  73. * THEN THE CHARACTER IS STILL HERE
  74. * ELSE PRINT CHARACTER
  75. *
  76. *****************************
  77. *                           *
  78. *    CREATE DOWNLOAD FILE   *
  79. *                           *
  80. *****************************
  81. *
  82.           ORG $800
  83. *
  84. DOWN       LDA  #$F3     ; INITIALIZE FILE POINTER
  85.           STA FPTR
  86.           LDA #$09
  87.           STA FPTR+1
  88.           LDA #31        ; FIRST CHARACTER - 1
  89.           STA COUNT
  90. NEXT      INC COUNT      ; GET A CHARACTER #
  91.           BNE NOTDONE    ; COUNT < > 0
  92.           JMP DONE
  93. NOTDONE   LDA COUNT      ; CONVERT CHARACTER # FOR GETADDR ROUTINE
  94.           SEC
  95.           SBC #32
  96.           STA INDX
  97.           JSR GETADDR    ; CALCULATE ADDRESS OF CHARACTER DATA
  98.           LDY #0         ; TEST FLAG BYTE FOR DOWNLOAD
  99.           LDA (BYTPTR),Y
  100.           LSR
  101.           BCC NEXT
  102.           PHA
  103.           CLC            ; BUMP FILE POINTER BY 13
  104.           LDA FPTR
  105.           ADC #13
  106.           STA FPTR
  107.           LDA FPTR+1
  108.           ADC #0
  109.           STA FPTR+1
  110.           LDA COUNT      ; STORE CHARACTER # AT FPTR
  111.           STA (FPTR),Y
  112.           TYA            ; Y = 0
  113.           STA SC         ; INIT - START COLUMN
  114.           LDA #1
  115.           STA CWO        ;      - CHAR WIDTH OFFSET
  116.           LDA #11
  117.           STA EC         ;      - END COLUMN
  118.           LDA #128
  119.           STA DE         ;      - DESCENDER
  120.           PLA            ; RETRIEVE FLAG BYTE
  121.           LSR            ; TEST FOR PROPORTIONAL
  122.           BCC NOTPROP    ; NOT A PROPORTIONAL CHARACTER
  123.           LSR            ; GET CHARACTER WIDTH OFFSET
  124.           PHA            ; SAVE FLAG BYTE
  125.           BCC GETFIRST
  126.           DEC CWO        ; NO OFFSET REQUIRED
  127. GETFIRST  INY            ; Y = 1
  128. GETFCOL   LDA (BYTPTR),Y ; GET A DATA BYTE
  129.           BNE FIRSTCOL   ; TEST FOR FIRST NON ZERO COLUMN
  130.           INY
  131.           CPY #8         ; NO MORE THAN 8
  132.           BNE GETFCOL    ; TEST NEXT COLUMN
  133.           DEY            ; MAKE IT 7
  134. FIRSTCOL  TYA
  135.           SEC
  136.           SBC CWO        ; SUBTRACT COLUMN WIDTH OFFSET
  137.           ASL            ; MULTIPLY  BY 16
  138.           ASL
  139.           ASL
  140.           ASL
  141.           STA SC
  142.           LDY #11        ; Y = 11  (LAST COLUMN)
  143. GETLAST   LDA (BYTPTR),Y ; GET A DATA BYTE
  144.           BNE LASTCOL    ; TEST FOR LAST NON ZERO COLUMN
  145.           DEY
  146.           CPY #3         ; NO LESS THAN THREE
  147.           BNE GETLAST    ; TEST NEXT COLUMN
  148.           INY            ; MAKE IT 4
  149. LASTCOL   TYA
  150.           CMP #11        ; IF 11
  151.           BEQ NOADD      ; DON'T ADD COLUMN WIDTH OFFSET
  152.           CLC
  153.           ADC CWO        ; ADD COLUMN WIDTH OFFSET
  154. NOADD     STA EC
  155.           PLA            ; RETRIEVE FLAG BYTE
  156.           ASL            ; CREATE A DUMMY CWO
  157. NOTPROP   LSR
  158.           LSR            ; TEST FOR DESCENDER
  159.           BCC CALCM0     ; NO DESCENDER
  160.           LDX #0         ; MAKE DE ZERO FOR DESCENDER
  161.           STX DE
  162. CALCM0    CLC            ; CALCULATE THE ATTRIBUTE BYTE
  163.           LDA DE         ; M0 = DESCENDER + START COL + END COL
  164.           ADC SC
  165.           ADC EC
  166.           LDY #1
  167.           STA (FPTR),Y   ; STORE AT FILE POINTER + 1
  168. STORCHR   LDA (BYTPTR),Y ; GET NEXT DATA BYTE
  169.           INY            ; FPTR IS ALWAYS 1 AHEAD OF BYTPTR
  170.           STA (FPTR),Y   ; STORE AT FILE POINTER
  171.           CPY #12        ; DONE 11 DATA BYTES ?
  172.           BNE STORCHR    ; NO
  173.           JMP NEXT       ; FIND ANOTHER CHARACTER
  174. DONE      LDY #13
  175.           LDA #0         ; MAKE LAST BYTE IN FILE
  176.           STA (FPTR),Y   ; A ZERO FOR DOWNLOAD ROUTINE
  177.           CLC            ; BUMP FPTR TO END OF FILE
  178.           LDA FPTR
  179.           ADC #14
  180.           STA FPTR
  181.           LDA FPTR+1
  182.           ADC #0
  183.           STA FPTR+1
  184.           SEC            ; DETERMINE FILE LENGTH
  185.           LDA FPTR
  186.           SBC #0
  187.           STA LEN
  188.           LDA FPTR+1
  189.           SBC #10
  190.           STA LEN+1
  191.           RTS            ; RETURN
  192. COUNT     HEX 00         ; COUNTER FOR LOOP
  193. SC        HEX 00         ; CHARACTER START COLUMN
  194. EC        HEX 00         ; CHARACTER END COLUMN
  195. DE        HEX 00         ; DESCENDER
  196. CWO       HEX 00         ; COLUMN WIDTH OFFSET
  197. FILLER    DS 2
  198. *
  199. *****************************
  200. *                           *
  201. *  DOWNLOAD CHARACTER SET   *
  202. *                           *
  203. *****************************
  204. *
  205. START     LDA $AA59      ; SAVE (S) REG FOR DOS PROBLEM
  206.           PHA
  207.           JSR HOME       ; CLEAR THE SCREEN
  208.           LDA #0         ; HTAB 1
  209.           STA CH
  210.           LDA #10        ; VTAB 10
  211.           STA CV
  212.           JSR VTAB
  213.           CLC            ; CALCULATE ADDRESS OF MSG1
  214.           LDA LOADADDR
  215.           ADC #MSG1-START
  216.           PHA
  217.           LDA LOADADDR+1
  218.           ADC #0
  219.           TAY            ; (Y) REG - HIBYTE OF MSG1
  220.           PLA            ; (A) REG - LOWBYTE OF MSG1
  221.           JSR STROUT     ; PRINT MSG1
  222. READKYB   LDA KYB        ; GET ANY KEY
  223.           BPL READKYB
  224.           BIT KYBSTROB
  225. NOINIT    LDY #IRAM-START ; CALCULATE ADDRESS OF IRAM
  226.           LDA LOADADDR
  227.           STA FPTR
  228.           LDA LOADADDR+1
  229.           STA FPTR+1
  230.           LDA (FPTR),Y   ; TEST FOR PRINTER RAM INITIALIZATION
  231.           CMP #1
  232.           BNE PRINT      ; NO INIT
  233.           LDA #ESC       ; COMMAND CODES TO INITIALIZE DOWNLOAD RAM
  234.           PMC CHROUT
  235.           LDA #COPY      ; "*"
  236.           PMC CHROUT
  237.           LDA #CHR0      ; "0"
  238.           PMC CHROUT
  239. PRINT     CLC
  240.           LDA LOADADDR   ; GET ADDRESS OF CHARACTER DATA
  241.           ADC #CHRDATA-START-13
  242.           STA BYTPTR     ; USING LAST BLOAD ADDRESS
  243.           LDA LOADADDR+1
  244.           ADC #1
  245.           STA BYTPTR+1
  246. OUT       CLC            ; ADD 13 TO GET ADDRESS OF
  247.           LDA BYTPTR     ; NEXT CHARACTER TO DOWNLOAD
  248.           ADC #13
  249.           STA BYTPTR
  250.           LDA BYTPTR+1
  251.           ADC #0
  252.           STA BYTPTR+1
  253.           LDY #0
  254.           LDA (BYTPTR),Y ; GET THE CHARACTER NUMBER
  255.           BEQ DDONE
  256.           PHA            ; SAVE ON THE STACK
  257.           LDA #ESC       ; OUTPUT CHAR DOWNLOAD DEFINITION COMMAND
  258.           PMC CHROUT
  259.           LDA #DOWNCHAR  ; "*"
  260.           PMC CHROUT
  261.           LDA #CHR1      ; "1"
  262.           PMC CHROUT
  263.           PLA            ; RETRIVE CHARACTER NUMBER FROM STACK
  264.           PMC CHROUT     ; OUTPUT TWICE
  265.           PMC CHROUT
  266.           INY
  267. OUTPUT    LDA (BYTPTR),Y ; GET A BYTE OF CHARACTER DATA
  268.           PMC CHROUT     ; OUTPUT TO PRINTER
  269.           INY
  270.           CPY #13
  271.           BNE OUTPUT     ; DONE THIS CHARACTER?
  272.           BEQ OUT        ; THEN GET THE NEXT ONE
  273. DDONE     JSR HOME       ; CLEAR TEXT SCREEN
  274.           LDA #0         ; SET HTAB
  275.           STA CH
  276.           LDA #10        ; SET VTAB
  277.           STA CV
  278.           JSR VTAB
  279.           CLC            ; CALCULATE ADDRESS OF MSG2
  280.           LDA LOADADDR
  281.           ADC #MSG2-START
  282.           PHA
  283.           LDA LOADADDR+1
  284.           ADC #1
  285.           TAY            ; (Y) REG - HIBYTE OF MSG2
  286.           PLA            ; (A) REG - LOWBYTE OF MSG2
  287.           JSR STROUT     ; PRINT MSG2
  288.           PLA
  289.           STA $AA59      ; RESTORE (S) REG
  290.           RTS
  291. *
  292. *****************************
  293. *                           *
  294. *      CHARACTER DATA       *
  295. *         STORAGE           *
  296. *                           *
  297. *****************************
  298. *
  299. IRAM      HEX 00
  300. MSG1      ASC "PRESS ANY KEY TO DOWNLOAD FONT"
  301.           HEX 00
  302. MSG2      ASC "FONT NOW DOWNLOADED"
  303.           HEX 00
  304. CHRDATA   HEX 00
  305.           LST OFF
  306.